/**
    \file tp1.cpp

    \brief Programme de calcul du temp de la distance parcourue en années lumières.

    \author   ZOTTI Clement 11074801
    \date     23/01/2012
    \version  v1.00

    <b>Entrees:</b>
        \li (\c clavier) Distance parcourue  (\c entier)
        \li (\c clavier) Vitesse du vaisseau  (\c entier)

    <b>Sorties:</b>
        \li (\c écran) Temps années  (\c entier)
        \li (\c écran) Temps jours  (\c entier)
        \li (\c écran) Temps heures  (\c entier)
        \li (\c écran) Temps minutes  (\c entier)
        \li (\c écran) Temps secondes  (\c entier)

    Programe de calcul du temps écoulé pour les passagers d'un vaisseau spatial
    à destination d'un système solaire voisin. Pas de prise de compte
    de l'accélération ni de la décélération.
    Il prendra en entrée la distance parcourue ainsi que la vitesse du vaisseau
    à un instant T.
    La sortie donnera la durée du voyage pour l’observateur stationnaire et
    la durée du voyage pour le passager.
    \e Vérification des entrées

    Date de la premiere version: 23/01/2012 \n

    Date de modification:
        \li 23/01/2012, Mise en place du programme, ZOTTI Clement
*/

/*-- Bibliotheques utilisees en ordre alphabetique --*/
#include <cmath>
#include <iostream>

using namespace std;



/**
    \struct temps
    \brief Objet structure de temps.

  Struture temps, qui regroupe les temps dont le passager et l'observateur ont besoin
  pour les calculs et pour l'affichage.
 */



/**
    \brief Fonction de traitement principale main
  */
int main()
{

    /// Constantes de conversion d'unité metre en années-lumière
    const long long int METRE_DANS_ANNEE_LUMIERE = 9460528000000000ULL;
    /// Constantes de la vitesse de la lumière
    const int VITESSE_LUMIERE = 299792458;
    /// Constantes de conversion d'unité secondes en minutes
    const int SEC_MIN = 60;
    /// Constantes de conversion d'unité secondes en heures
    const int SEC_HEURE = 3600;
    /// Constantes de conversion d'unité secondes en jours
    const int SEC_JOURS = 86400;
    /// Constantes de conversion d'unité secondes en années
    const int SEC_ANNEE = 31536000;

    int t_observateur_annees;
    int t_observateur_jours;
    int t_observateur_heures;
    int t_observateur_minutes;
    int t_observateur_secondes;
    double t_observateur_temps;
    double t_observateur_Dtemps;


    int t_passager_annees;
    int t_passager_jours;
    int t_passager_heures;
    int t_passager_minutes;
    int t_passager_secondes;
    double t_passager_temps;
    double t_passager_Dtemps;

    /// Déclaration des variables
    int tmp_distance_parcourue, tmp_vitesse_vaisseau;

    float distance_parcourue;
    int vitesse_vaisseau;


    /// Lecture des entrées avec vérification
    cout << "Distance parcourue (annees-lumiere): " << endl;
    cin >> tmp_distance_parcourue;

    cout << "Vitesse du vaisseau (m/s) : " << endl;
    cin >> tmp_vitesse_vaisseau;

	/// Calcul conversion distance
	distance_parcourue = METRE_DANS_ANNEE_LUMIERE * tmp_distance_parcourue;
	cout << distance_parcourue;

	/// Calcul du temps observateur et passager
	t_observateur_temps = distance_parcourue / tmp_vitesse_vaisseau;

	t_passager_Dtemps = pow(tmp_vitesse_vaisseau,2.0)/pow(VITESSE_LUMIERE,2.0);
	t_passager_Dtemps = 1-(t_passager_Dtemps);
	t_passager_Dtemps = sqrt(t_passager_Dtemps);
	t_passager_temps = t_observateur_temps * t_passager_Dtemps;

	/// Conversion du temps observateur
	t_observateur_annees = (int)t_observateur_temps / SEC_ANNEE;
	t_observateur_temps = (int)t_observateur_temps % SEC_ANNEE;

	t_observateur_jours = (int)t_observateur_temps / SEC_JOURS;
	t_observateur_temps = (int)t_observateur_temps % SEC_JOURS;

	t_observateur_heures = (int)t_observateur_temps / SEC_HEURE;
	t_observateur_temps = (int)t_observateur_temps % SEC_HEURE;

	t_observateur_minutes = (int)t_observateur_temps / SEC_MIN;
	t_observateur_temps = (int)t_observateur_temps % SEC_MIN;

	t_observateur_secondes = (int)t_observateur_temps;


	/// Conversion du temps passager
	t_passager_annees = (int)t_passager_temps / SEC_ANNEE;
	t_passager_temps = (int)t_passager_temps % SEC_ANNEE;

	t_passager_jours = (int)t_passager_temps / SEC_JOURS;
	t_passager_temps = (int)t_passager_temps % SEC_JOURS;

	t_passager_heures = (int)t_passager_temps / SEC_HEURE;
	t_passager_temps = (int)t_passager_temps % SEC_HEURE;

	t_passager_minutes = (int)t_passager_temps / SEC_MIN;
	t_passager_temps = (int)t_passager_temps % SEC_MIN;

	t_passager_secondes = (int)t_passager_temps;

	/// Sortie des temps pour l'observateur et le passager en
	/// années, jours, heures, minutes, secondes

	cout << "Temps ecoule pour l'observateur : " << endl
		 << t_observateur_annees << " annees, " << endl
		 << t_observateur_jours << " jours, " << endl
		 << t_observateur_heures << " heures, " << endl
		 << t_observateur_minutes << " minutes, " << endl
		 << t_observateur_secondes << " secondes" << endl;

	cout << "Temps ecoule pour le passager : " << endl
		 << t_passager_annees << " annees, " << endl
		 << t_passager_jours << " jours, " << endl
		 << t_passager_heures << " heures, " << endl
		 << t_passager_minutes << " minutes, " << endl
		 << t_passager_secondes << " secondes" << endl;

    return 0;
}
